// WebSocket消息类型定义

/**
 * WebSocket消息基础接口
 */
export const MessageType = {
  REGISTER: 'REGISTER',
  REGISTER_SUCCESS: 'REGISTER_SUCCESS',
  PING: 'PING',
  PONG: 'PONG',
  FORCE_LOGOUT: 'FORCE_LOGOUT',
  CONNECTION_TIMEOUT: 'CONNECTION_TIMEOUT',
  ERROR: 'ERROR',
  
  // 应用特定消息类型
  NOTIFICATION: 'NOTIFICATION',
  POINTS_UPDATE: 'POINTS_UPDATE',
  VIDEO_UPDATE: 'VIDEO_UPDATE',
  USER_STATUS_UPDATE: 'USER_STATUS_UPDATE'
};

/**
 * WebSocket消息格式
 */
export class WebSocketMessage {
  constructor(type, data = null) {
    this.type = type;
    this.data = data;
  }
  
  toJSON() {
    return {
      type: this.type,
      data: this.data
    };
  }
  
  toString() {
    return JSON.stringify(this.toJSON());
  }
  
  /**
   * 从对象创建WebSocketMessage实例
   * @param {Object} obj 消息对象
   * @returns {WebSocketMessage} WebSocketMessage实例
   */
  static fromObject(obj) {
    return new WebSocketMessage(obj.type, obj.data);
  }
  
  /**
   * 转换为普通对象
   * @returns {Object} 普通对象
   */
  toObject() {
    return {
      type: this.type,
      data: this.data
    };
  }
}

/**
 * 连接状态枚举
 */
export const ConnectionStatus = {
  DISCONNECTED: 'disconnected',
  CONNECTING: 'connecting',
  CONNECTED: 'connected',
  RECONNECTING: 'reconnecting',
  ERROR: 'error'
};

/**
 * 注册成功响应数据格式
 */
export class RegisterSuccessData {
  constructor(conn_id, message, ping_interval, user_id) {
    this.conn_id = conn_id;
    this.message = message;
    this.ping_interval = ping_interval;
    this.user_id = user_id;
  }
}

/**
 * WebSocket配置选项
 */
export const WebSocketConfig = {
  // WebSocket服务器地址
  SERVER_URL: 'ws://119.91.228.85:7070/api/ws',
  
  // 重连配置
  reconnectBaseDelay: 1000, // 基础重连延迟
  maxReconnectAttempts: 5, // 最大重连次数
  reconnectBackoff: 2, // 重连退避系数
  maxReconnectDelay: 30000, // 最大重连延迟
  connectionTimeout: 10000, // 连接超时时间
  
  // 心跳配置
  heartbeatInterval: 30000, // 30秒心跳间隔
  pongTimeout: 10000, // 10秒PONG响应超时
  
  // 消息队列配置
  maxQueueSize: 100 // 最大消息队列大小
};
